﻿
using Marvin.Prediction;

namespace Marvin
{
    /// <summary>
    /// The algorithm selector is a factory that tries to select the best algorithm based on the requirements passed along 
    /// as parameters.  If you know the difference between a univariate and a multivariate Gaussian and when it's appropriate 
    /// to use one over the other in a machine learning context, it might be better to instantiate the appropriate algorithm 
    /// yourself. If not, this is a good place to start. 
    /// </summary>
    public interface IAlgorithmSelector
    {
        /// <summary>
        /// Creates the prediction algorithm based on the requirements passed along or standard requirements if none are provided.
        /// </summary>
        /// <param name="requirements">The requirements.</param>
        /// <returns>An initialized prediction algorithm that is ready to be trained.</returns>
        IPredictionAlgorithm CreatePredictionAlgorithm(PredictionRequirements requirements = null);
    }
}
